package com.data.capture.mq.dto;

import com.alibaba.fastjson.JSON;
import com.data.capture.constant.OperationType;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;
import java.util.Map;

/**
 * 数据变更信息
 * @author linch
 **/
@Data
@Accessors(chain = true)
public class ChangeDataCaptureInfo {

    /** 操作数据库 */
    private String database;
    /** 操作表名 */
    private String tableName;
    /** 操作类型 */
    private String type;
    /** 变更前数据 */
    private Map<String, Object> beforeMap = Maps.newLinkedHashMap();
    /** 变更后数据 */
    private Map<String, Object> afterMap = Maps.newLinkedHashMap();
    /** 变更字段 */
    private List<String> changeFields = Lists.newArrayList();
    /** 监控到变化的时间 */
    private long monitoringTime = System.currentTimeMillis();

    /**
     * 主键字段
     */
    private String primaryKey;
    /**
     * 主键字段值
     */
    private String primaryValue;

    public void toSimple() {
        this.afterMap = Maps.newLinkedHashMap();
        // 如果是删除操作，需要记录之前的数据
        if (OperationType.DELETE.eq(type)) {
            return;
        }
        this.beforeMap = Maps.newLinkedHashMap();
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }

}
